package br.ufrn.dimap.projetodetalhadodesoftware.chatrmi.controller.parental;

import java.util.*;
import java.io.*;
/**
 * 
 * @author DÉRUE, PERIGNE
 *
 */
public class ControleParental {

    private ArrayList<String> grosMots = new ArrayList<String>();
    private int nbGrosMots=0;
    private int nbMots=0;
    private boolean activer=false;
 
    public ControleParental() {}

    //Constructeur qui charge le dictionnaire
    public ControleParental(String fichier)
    {
	chargerDictionnaire(fichier);
    }

    //Fonction qui crée une chaîne d'étoiles à partir d'un mot
    private String motEtoiles(String mot)
    {
	int i;
	String etoiles = "";
	for(i=0;i<mot.length();i++)
	    {
		etoiles=etoiles+"*";
	    }
	return etoiles;
    }

    public void chargerDictionnaire(String fichier)
    {		
	//lecture du fichier qui contient les Gros Mots	
	try{
	    InputStream ips=new FileInputStream(fichier); 
	    InputStreamReader ipsr=new InputStreamReader(ips);
	    BufferedReader br=new BufferedReader(ipsr);
	    String ligne;
	    while ((ligne=br.readLine())!=null){
		// Ajout de chaque mot dans l'ArrayList
		grosMots.add(ligne);
	    }
	    br.close(); 
	}		
	catch (Exception e){
	    System.out.println(e.toString());
	}
    }

    public String filtrerMessage(String texte)
    {
	if(this.activer)
	{
	ArrayList<String> grosMotsDetectes = new ArrayList<String>();
	String[] buffer;
	int i;

	//On extrait les mots entre les espaces et les ponctuations
	buffer=texte.split("[\\p{Punct} ]+");
	for(i=0; i<buffer.length;i++)
	    {
		//Si un mot est contenu dans la liste des Gros Mots...
		if(grosMots.contains(buffer[i].toLowerCase())) 
		    {
			//...il est ajouté à la liste des Gros Mots détectés
			grosMotsDetectes.add(buffer[i]);
		    }
	    }
	//On remplace les Gros Mots détectés par des étoiles
	for(String grosMot : grosMotsDetectes)
	    {
		texte=texte.replaceAll(grosMot,motEtoiles(grosMot));
	    }
	 }
	return texte;
    }
    
     public void analyserMessage(String texte)
    {
	String[] buffer;
	int i;

	//On extrait les mots entre les espaces et les ponctuations
	buffer=texte.split("[\\p{Punct} ]+");
	for(i=0; i<buffer.length;i++)
	    {
	    nbMots++;
		//Si un mot est contenu dans la liste des Gros Mots...
		if(grosMots.contains(buffer[i].toLowerCase())) 
		    {
			nbGrosMots++;
		    }
	    }
    }

    public double getTauxGrosMots()
    {
	return 1.00*nbGrosMots/nbMots;
    }
    
    public void activer() {
    this.activer=true;
    }
    
    public void desactiver() {
    this.activer=false;
    }
}
